package com.wyix.pool;

import java.util.concurrent.*;

public class AbortPolicyDemo2 {
    public static void main(String[] args) {
        // 自定义拒绝策略的缓存线程池（默认max=Integer.MAX_VALUE，这里手动限制）
        ThreadPoolExecutor threadPool = new ThreadPoolExecutor(
                0,               // corePoolSize：0
                3,               // maxPoolSize：最多3个线程（关键！限制后触发拒绝）
                60,              // keepAliveTime：60秒
                TimeUnit.SECONDS,
                new SynchronousQueue<>(),  // 队列容量0（任务直接交给线程）
                new ThreadPoolExecutor.AbortPolicy()
        );

        // 提交5个任务（超过max=3，触发拒绝）
        for (int i = 0; i < 5; i++) {
            int taskId = i + 1;
            try {
                threadPool.execute(() -> {
                    System.out.println("任务" + taskId + " 执行中...");
                    try {
                        Thread.sleep(2000);
                    } catch (InterruptedException e) {
                    }
                });
                System.out.println("任务" + taskId + " 提交成功");
            } catch (RejectedExecutionException e) {
                System.out.println("任务" + taskId + " 被拒绝！原因：" + e.getMessage());
            }
        }

        threadPool.shutdown();
    }
}